AWSDeepRacerのローカルトレーニング (DeepRacer For Cloud) をWindows(WSL)でやってみた
AWS事業本部梶原@福岡オフィスです。AWS DeepRacerではMentaiko-DevelopersIOで参加しています。
AWS 上で実施する場合はちょっと古いですが、こちらの記事をご参考ください。
WindowsマシンでAWS DeepRacerのローカルトレーニングを実施してみます。
本来、Nvidia のGPU(CUDA)が必要ですが、ちょっとやってみたいという人のためにCPUだけでぶん回してみます。
実際に、手元のWindows (Surface3)で実行しています。
AWSDeepRacer ローカルトレーニングとは
通常 AWS DeepRacerはAWSのコンソール上から、お手軽にモデルのトレーニングを開始、レースに参加できます。(無料利用枠もあります)
AWS DeepRacerは、AWSのマネージドサービスSageMaker, RoboMaker, S3, Kinesis等を組み合わせてAWSのコンソール上で実施できるようにサービスが提供されています。 AWS DeepRacerの構築内容などはAWSから公開されています。それを単独の環境(EC2やローカルのPCなど)でモデルのトレーニングを実行できるように有志によって作成されたのがローカルトレーニングになります。
主なモチベーションはコストメリットになりますが、マネージドサービスを使わないことによるトレードオフが発生します。具体的にはメモリ不足、ストレージの空き容量などのハード面の管理、個人的に一番大きいと思っているのがモデルの履歴管理を自分でしないといけません。
とはいえ、ローカルトレーニング環境を触っていると、各サービスの連携やSageMaker,RoboMakerの実装方法などに詳しくなれます。そして自由にカスタマイズ(壊すこともよくありますが)もできます。
WSLの準備
Ubuntu 20.04.4 LTS を使用します。
Microsoft Store よりUbuntu 20.04.4 LTS を入手してください
https://apps.microsoft.com/store/detail/ubuntu-20044-lts/9MTTCL66CPXJ
Ubuntu 20.04 がインストールできたら、スタートメニュー等より起動させてください
DeepRacer 用のユーザー追加(オプション)
$sudo useradd deepracer $sudo usermod -aG sudo deepracer $sudo su - deepracer
Docker 環境等の準備
Docker また、AWSコマンド等のインストールを実施します。
$ sudo apt-get update -y $ sudo apt-get install jq awscli python3-boto3 docker-compose -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update && sudo apt-get install -y --no-install-recommends docker-ce docker-ce-cli containerd.io
GPUを使用する場合はnvidiaのDocker イメージを有効にまたDockerでのGPUの使用を有効にしてください
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list cat /etc/docker/daemon.json | jq 'del(."default-runtime") + {"default-runtime": "nvidia"}' | sudo tee /etc/docker/daemon.json
参考 https://aws-deepracer-community.github.io/deepracer-for-cloud/windows.html
Docker の起動
sudo service docker start
minio の設定
$ aws configure --profile minio AWS Access Key ID [None]: minio <= なんでもいいです AWS Secret Access Key [None]: miniokey <= なんでもいいです Default region name [None]: Default output format [None]:
Install DRfC
DeepRacer for Cloud のインストールを実施します。
docker 関連でエラーが出る場合は、dockerグループへの追加が有効になっていないので、一度ログインしなおしてみてください
$ git clone https://github.com/aws-deepracer-community/deepracer-for-cloud.git $ cd deepracer-for-cloud/ $ bin/init.sh -a cpu -c local (Dokcer Imageのダウンロードが実施されます) 5.0.0: Pulling from awsdeepracercommunity/deepracer-rlcoach 5.0.1-cpu-avx2: Pulling from awsdeepracercommunity/deepracer-robomaker 5.0.0-cpu: Pulling from awsdeepracercommunity/deepracer-sagemaker (GPUを使う場合は) $ bin/init.sh -a gpu -c local $ docker pull awsdeepracercommunity/deepracer-sagemaker:5.0.0-gpu $ docker pull awsdeepracercommunity/deepracer-robomaker:5.0.1-gpu
DeepRacer for Cloudの実行
$ source bin/activate.sh Creating service s3_minio $ dr-upload-custom-files Uploading files to s3://bucket/custom_files/ upload: custom_files/hyperparameters.json to s3://bucket/custom_files/hyperparameters.json upload: custom_files/model_metadata.json to s3://bucket/custom_files/model_metadata.json upload: custom_files/reward_function.py to s3://bucket/custom_files/reward_function.py
ここまでできたら、ローカルトレーニングを一度実行してみます。
初期のmodel_metadata.json は速度がかなり遅い(0.8m/s)ので、以下のように編集して速くしてみます。
$ vi custom_files/model_metadata.json { "action_space": [ { "steering_angle": -30, "speed": 1.0 }, { "steering_angle": -15, "speed": 2.0 }, { "steering_angle": 0, "speed": 3.0 }, { "steering_angle": 15, "speed": 2.0 }, { "steering_angle": 30, "speed": 1.0 } ], "sensor": ["FRONT_FACING_CAMERA"], "neural_network": "DEEP_CONVOLUTIONAL_NETWORK_SHALLOW", "training_algorithm": "clipped_ppo", "action_space_type": "discrete", "version": "4" } $ 編集したら再度アップロードをして反映させてください $ dr-upload-custom-files
実際にローカルトレーニングを始めてみます。
$ dr-start-training Creating Robomaker configuration in s3://bucket/rl-deepracer-sagemaker/training_params.yaml Creating service deepracer-0_rl_coach Creating service deepracer-0_robomaker 22:C 16 May 2022 08:21:24.688 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 22:C 16 May 2022 08:21:24.688 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=22, just started 22:C 16 May 2022 08:21:24.688 # Configuration loaded 22:M 16 May 2022 08:21:24.689 * monotonic clock: POSIX clock_gettime _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 6.2.6 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 22 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | https://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-'
下記のようなログがではじめたら、起動は成功です!!!
Unable to find deepracer checkpoint json [s3] Successfully uploaded .lock to s3 bucket bucket with s3 key rl-deepracer-sagemaker/model/.lock. [s3] Successfully uploaded .ready to s3 bucket bucket with s3 key rl-deepracer-sagemaker/model/.ready. DoorMan: installing SIGINT, SIGTERM Training> Name=main_level/agent, Worker=0, Episode=1, Total reward=36.35, Steps=67, Training iteration=0 Training> Name=main_level/agent, Worker=0, Episode=2, Total reward=9.03, Steps=90, Training iteration=0 Training> Name=main_level/agent, Worker=0, Episode=3, Total reward=34.73, Steps=145, Training iteration=0 Training> Name=main_level/agent, Worker=0, Episode=4, Total reward=12.75, Steps=176, Training iteration=0
Ctrl-C 等で一度ぬけます(トレーニングはバックグランドで実行されています)
動いているDeepRacerを見てみます。
$ dr-start-viewer
Docker内でストリームが起動するので、WSLのIPアドレスを確認します。
$ dr-start-viewer $ ip addr show dev eth0 4: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 link/ether xxxxxxxxxxxxxxxxxxxxxxxxxx brd ff:ff:ff:ff:ff:ff inet 172.25.xx.xx/20 brd 172.25.xxxx.255 scope global eth0 valid_lft forever preferred_lft forever
eth0 の情報のinet の部分 172.xx.xx.xx をWindowsの方でブラウザに入力し、ポート8100 に接続します。
下記のような画面がでてくれば、成功です。
AWSコンソールと同様にDeepRacerCarが動いているのが確認できるかと思います。
結構CPUが唸ると思いますが、1~2時間ほどトレーニングすると初期の報酬関数でもそれなりに走りますので、眺めてみてください。
DeepRacer for Cloud を停止する
ビューアを停止します。
$ dr-stop-viewer
トレーニングを停止します
$ dr-stop-training
Dockerを停止します。
$ sudo service docker stop
まとめ
Windows環境でもローカルトレーニングが実施できました。Docker イメージがおそらくx86系になるかとおもいますがIntel Macでもおそらくできそうな気がしています。
WSLでGPUサポートが始まったのが最近なので、ちょっとGPUを実際に使用するのはコツがいりますがCPUだけでもそれなりに動くのでDeepRacerのローカルトレーニングのために、Ubuntuマシンを用意するハードルがちょっと高いなと思っている方でもできるようにしてみました。
よくよく考えると、WSLで機械学習のトレーニングができちゃってるのはなかなか面白い気がします。
参考情報
WSLでGPUを有効にする